import 'package:json_annotation/json_annotation.dart';

import '../index.dart';

part 'start_trans_v2_response.g.dart';

@JsonSerializable()
class StartTransV2Response extends Object {
  /// 交易金额（以分为单位）
  @JsonKey(name: 'amount', defaultValue: 0)
  int amount;

  /// 银行授权码
  @JsonKey(name: 'approvedCode', defaultValue: '')
  String approvedCode;

  /// 交易批次号
  @JsonKey(name: 'batchNumber', defaultValue: '')
  String batchNumber;

  /// 刷卡方式（如："芯片"、"非接"等）
  @JsonKey(name: 'cardDataEntry', defaultValue: '')
  String cardDataEntry;

  /// 持卡人验证方式
  @JsonKey(name: 'cardHolderVerificationMethod', defaultValue: '')
  String cardHolderVerificationMethod;

  /// 卡号（脱敏处理）
  @JsonKey(name: 'cardNumber', defaultValue: '')
  String cardNumber;

  /// 卡组织（如："VISA"、"银联"等）
  @JsonKey(name: 'cardProduct', defaultValue: '')
  String cardProduct;

  /// 货币代码（ISO数字代码）
  @JsonKey(name: 'currencyCode', defaultValue: 0)
  int currencyCode;

  /// 交易日期（格式：YYYYMMDD）
  @JsonKey(name: 'date', defaultValue: '')
  String date;

  /// EMV应用标识符
  @JsonKey(name: 'emvAid', defaultValue: '')
  String emvAid;

  /// EMV应用标签
  @JsonKey(name: 'emvAppLabel', defaultValue: '')
  String emvAppLabel;

  /// 外部系统交易流水号
  @JsonKey(name: 'externalTransactionID', defaultValue: '')
  String externalTransactionID;

  /// 商户号
  @JsonKey(name: 'merchantID', defaultValue: '')
  String merchantID;

  /// 商户附加信息
  @JsonKey(name: 'merchantInfo')
  MerchantInfoRepsonse merchantInfo;

  /// PIN校验是否通过
  @JsonKey(name: 'pinOk', defaultValue: false)
  bool pinOk;

  /// 是否由支付APP打印小票
  @JsonKey(name: 'printByPaymentApp', defaultValue: false)
  bool printByPaymentApp;

  /// 支付网关返回消息
  @JsonKey(name: 'responseMessage', defaultValue: '')
  String responseMessage;

  /// 交易结果码（0=成功）
  @JsonKey(name: 'result', defaultValue: 0)
  int result;

  /// 终端流水号
  @JsonKey(name: 'sequenceNumber', defaultValue: '')
  String sequenceNumber;

  /// 终端编号
  @JsonKey(name: 'terminalID', defaultValue: '')
  String terminalID;

  /// 交易时间（格式：HHMMSS）
  @JsonKey(name: 'time', defaultValue: '')
  String time;

  /// 小费金额（以分为单位）
  @JsonKey(name: 'tipAmount', defaultValue: 0)
  int tipAmount;

  /// 交易唯一标识
  @JsonKey(name: 'transactionID', defaultValue: '')
  String transactionID;

  /// 交易类型（消费、退款等）
  @JsonKey(name: 'transactionType', defaultValue: 1)
  int transactionType;

  StartTransV2Response(
    this.amount,
    this.approvedCode,
    this.batchNumber,
    this.cardDataEntry,
    this.cardHolderVerificationMethod,
    this.cardNumber,
    this.cardProduct,
    this.currencyCode,
    this.date,
    this.emvAid,
    this.emvAppLabel,
    this.externalTransactionID,
    this.merchantID,
    this.merchantInfo,
    this.pinOk,
    this.printByPaymentApp,
    this.responseMessage,
    this.result,
    this.sequenceNumber,
    this.terminalID,
    this.time,
    this.tipAmount,
    this.transactionID,
    this.transactionType,
  );

  factory StartTransV2Response.fromJson(Map<String, dynamic> srcJson) =>
      _$StartTransV2ResponseFromJson(srcJson);

  Map<String, dynamic> toJson() => _$StartTransV2ResponseToJson(this);
}
